package br.ucb.cesbdao.servicos;

import java.sql.SQLException;
import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import br.ucb.cesbdao.beans.Atendimento;
import br.ucb.cesbdao.janelas.Janela;
import br.ucb.cesbdao.model.AcessoModel;
import br.ucb.cesbdao.model.AtendimentoModel;
import br.ucb.cesbdao.model.TipoAtendimentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TipoEncaminhamentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TrabalhadorModel;
import br.ucb.cesbdao.model.impl.AcessoModelImpl;
import br.ucb.cesbdao.model.impl.AtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoAtendimentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoEncaminhamentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TrabalhadorModelImpl;
import br.ucb.cesbdao.visao.Visao;


public class Validadores {
	public static boolean passwordEqual(String senha1, String senha2, JLabel campoErro){
		if(!senha1.equals(senha2)){
			campoErro.setText("Senhas não conferem!");
			return false;
		}
		campoErro.setText("");
		return true;
	}

	public static boolean passwordEqual(String senha, JLabel campoErro){
		AcessoModel acessoModel = new AcessoModelImpl();
		TrabalhadorModel trabModel = new TrabalhadorModelImpl();
		if(!senha.equals((acessoModel.consultaAcessoCpf(trabModel.consultaTrabalhador(Integer.parseInt(Janela.getTxt_idTrabalhador())).getCpf())).getSenha())){
			campoErro.setText("Senha atual inválida!");
			return false;
		}
		campoErro.setText("");
		return true;
	}

	public static char verificaConexao(String txtCpf, String txtSenha) {
		if(txtCpf.isEmpty())
			if(txtSenha.isEmpty())
				return 'A' ;
			else
				return 'B';
		else
			if(txtSenha.isEmpty()) 
				return 'C';
			else 
				if(isCpf(txtCpf) && (isSenha(txtSenha))) {
					return 'D';
				}
				else
					return 'E';
	}

	public static boolean isSenha(String senha){
		if(senha.length()<4){
			JOptionPane.showMessageDialog(null, "Senha Inválida.", "Erro para conexão", JOptionPane.ERROR_MESSAGE);
			return false;			
		}
		return true;
	}

	public static boolean isCpf(String cpf) {
		try {
			if(!isCPFValidoLogin(cpf)){
				JOptionPane.showMessageDialog(null, "CPF é inválido.", "Erro para conexão", JOptionPane.ERROR_MESSAGE);
				return false;
			}	

		} catch (Exception exc) {
			JOptionPane.showMessageDialog(null, "CPF não tem só números e por isso é inválido.", "Erro para conexão", JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
	}

	private static boolean isPacienteAtendimento(Integer idPaciente, String msgErro, JLabel campoErro) throws ClassNotFoundException, SQLException {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(model.isVerificaEmAtendimento(idPaciente)){
			campoErro.setText(msgErro);
			return false;
		}
		return true;
	}
	private static boolean isAFIAtendimento(String cpfAFI, String msgErro) throws ClassNotFoundException, SQLException {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(model.isVerificaEmAtendimentoAFI(cpfAFI)){
			Visao.showMessageError(msgErro, msgErro);
			return true;
		}
		return false;
	}
	private static boolean isAFIAtendimento(String cpfAFI) throws ClassNotFoundException, SQLException {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(model.isVerificaEmAtendimentoAFI(cpfAFI)){
			return false;
		}
		return true;
	}
	public static boolean validaEmail(String msgErro, JTextField campo, JLabel campoErro){
		final String EMAIL_REGEX = "^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$";

		if(campo.getText().trim().isEmpty()){
			campoErro.setText(msgErro);
			return false;
		}

		Pattern p = Pattern.compile(EMAIL_REGEX);

		Matcher m = p.matcher(campo.getText().trim());

		if(!m.matches()){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}
	public static boolean validaEmail(String campo){
		final String EMAIL_REGEX = "^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$";

		if(campo.trim().isEmpty()){
			return false;
		}

		Pattern p = Pattern.compile(EMAIL_REGEX);

		Matcher m = p.matcher(campo.trim());

		if(!m.matches()){
			return false;
		}
		return true;
	}


	public static boolean validaTelefone(String msgErro, JTextField campo, JLabel campoErro){
		String str = Servicos.unFormat(campo.getText());

		if(str.isEmpty() ){
			campoErro.setText(msgErro);
			return false;
		}
		if(!isStringValida(str, msgErro, campoErro))
			return false;
		return isDDDValido(str, campoErro);      
	}
	public static boolean validaTelefone(String campo){
		String str = Servicos.unFormat(campo);

		if(str.isEmpty() ){
			return true;
		}
		if(!isStringValida(str))
			return false;
		return isDDDValido(str);      
	}

	public static boolean validaString(String msgErro, JTextField campo, JLabel campoErro){
		return isStringValida(campo.getText(), msgErro, campoErro);
	}
	public static boolean validaString(JLabel campoErro,
			JTextField campo) {

		return isStringValida(campo.getText(),campoErro);
	}
	public static boolean validaString(String string) {

		return isStringValida(string);
	}
	public static boolean validaRadio(JLabel campoErro,
			ButtonGroup radio) {

		return isRadioValido(radio,campoErro);
	}


	public static boolean validaStringMascara(String msgErro, JTextField campo, JLabel campoErro){
		return isStringValida(campo.getText().replace(".", "").replace("-", "").replace("/", "").replace(":", ""), msgErro, campoErro);
	}

	public static boolean validaString(String msgErro, JTextField campo, JLabel campoErro, int min, int max){
		return isStringValida(campo.getText(), msgErro, campoErro, min, max);
	}

	public static boolean validaString(String msgErro, JTextArea campo, JLabel campoErro, int min, int max){
		return isStringValida(campo.getText(), msgErro, campoErro, min, max);
	}

	public static boolean validaPacienteEmConsulta(String msgErro,Integer idPaciente, JLabel campoErro) throws ClassNotFoundException, SQLException {
		return isPacienteAtendimento(idPaciente,msgErro,campoErro);
	}
	public static boolean validaAFIEmConsulta(String msgErro, String cpfAFI) throws ClassNotFoundException, SQLException {
		return isAFIAtendimento(cpfAFI,msgErro);
	}
	public static boolean validaAFIEmConsulta(String cpfAFI) throws ClassNotFoundException, SQLException {
		return isAFIAtendimento(cpfAFI);
	}
	public static boolean validaCPFPaciente(String msgErro, JTextField campo, JLabel campoErro){
		String cpf = Servicos.unFormat(campo.getText());

		if(cpf.isEmpty())
			return true;
		if(!isCPFValido(cpf)){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;

	}

	public static boolean validaCPF(String msgErro, JTextField campo, JLabel campoErro){
		if(!isCPFValido(Servicos.unFormat(campo.getText()))){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}

	public static boolean validaInt(String msgErro, JTextField campo, JLabel campoErro){
		int valor;
		if(campo.getText().trim().isEmpty()){
			campoErro.setText(msgErro);
			return false;
		}

		try{
			valor = Integer.parseInt(campo.getText().trim());
		}catch(NumberFormatException ex){
			campoErro.setText(msgErro);
			return false;
		}

		if(!isIntValido(valor, 1)){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}

	public static boolean validaIntNull(String msgErro, JTextField campo, JLabel campoErro){
		int valor;
		if(campo.getText().trim().isEmpty()){
			campoErro.setText(msgErro);
			return false;
		}

		try{
			valor = Integer.parseInt(campo.getText().trim());
		}catch(NumberFormatException ex){
			campoErro.setText(msgErro);
			return false;
		}

		if(!isIntValido(valor, 1)){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}



	public static boolean validaHora(String msgErro, JTextField campo, JLabel campoErro){
		String time[] = campo.getText().split(":");
		Integer hora[] = Servicos.parseInteger(time);
		if(hora == null){
			campoErro.setText(msgErro);
			return false;
		}

		if(!(isIntValido(hora[0], 0, 23)) || !(isIntValido(hora[1], 0, 59))){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}
	public static boolean validaHora(String msgErro, JTextField campo, JLabel campoErro,JTextField horaInicial){
		String time[] = campo.getText().split(":");
		String time0[] = horaInicial.getText().split(":");
		Integer hora[] = Servicos.parseInteger(time);
		Integer hora0[] = Servicos.parseInteger(time0);
		if(hora == null){
			campoErro.setText(msgErro);
			return false;
		}

		if(!(isIntValido(hora[0], 0, 23)) || !(isIntValido(hora[1], 0, 59))){
			campoErro.setText(msgErro);
			return false;
		}

		if(hora[0] < hora0[0]){
			campoErro.setText(msgErro);
			return false;
		}
		if(hora[0] == hora0[0])
			if(hora[1] <= hora0[1]){
				campoErro.setText(msgErro);
				return false;
			}
		campoErro.setText("");
		return true;
	}

	public static boolean validaDataHoraRegistro(String date[], String time[]){
		Integer data[], hora[];
		data=Servicos.parseInteger(date);
		hora=Servicos.parseInteger(time);

		if(isDataValida(data) == -1)
			return false;
		if(isDataValida(data) == 0){
			if(isHoraValida(hora) == -1 || isHoraValida(hora) == 0)
				return false;
			return true;
		}
		return true;
	}

	/*public static boolean validaDataHoraAtendimento(ArrayList<Pessoa> pessoas,ArrayList<Grupo> grupos,JFormattedTextField txt_dataAtendimento,JFormattedTextField txt_horaAtendimento,JTextField txt_idTrabalhador,JLabel erroDataAtendimento, JLabel erroHoraAtendimento){
        Integer codigoGrupo=0,diaSemana=0, data[], hora[];
        String horaInicial = null,horaFinal = null;
        data=Servicos.parseInteger(txt_dataAtendimento.getText().split("/"));
        hora=Servicos.parseInteger(txt_horaAtendimento.getText().split(":"));
        int diaAtendimento;
        for (Pessoa pessoa: pessoas){
            if((pessoa.getId().toString().equals(txt_idTrabalhador.getText()))){
                Trabalhador atendente = (Trabalhador) pessoa;
                codigoGrupo=atendente.getIdGrupo();
            }
        }
        for (Grupo grupo : grupos){
            if(grupo.getIdGrupo()==codigoGrupo){
                diaSemana=grupo.getDiaSemana();
                horaInicial=grupo.getHorarioInicial();
                //horaFinal = grupo.getHorarioSaida();
            }
        }
        diaAtendimento=retornarDiaSemana(data[2], data[1], data[0]);
        if(diaAtendimento!=diaSemana){
            erroDataAtendimento.setText("Data inválida!");
            return false;
        }

        if(isHoraValida( Servicos.parseInteger(horaInicial.split(":")), hora)==-1){
            erroHoraAtendimento.setText("Hora inválida!");
            return false;
        }

        if(isHoraValida( Servicos.parseInteger(horaFinal.split(":")), hora)==1){
            erroHoraAtendimento.setText("Hora inválida!");
            return false;
        }
       erroDataAtendimento.setText("");
       erroHoraAtendimento.setText("");
       return true;
    }*/

	public static boolean validaHora(String msgErro, JTextField campoHora, String []date, JLabel campoErro){
		Integer data[] = Servicos.parseInteger(date);
		String time[] = campoHora.getText().split(":");
		Integer hora[] = Servicos.parseInteger(time);

		if(hora == null || data == null){
			campoErro.setText(msgErro);
			return false;
		}
		if(!(isIntValido(hora[0], 0, 23)) || !(isIntValido(hora[1], 0, 59))){
			campoErro.setText(msgErro);
			return false;
		}
		if(isDataValida(data) == 0){
			if(isHoraValida(hora) != -1){
				campoErro.setText(msgErro);
				return false;
			}
		}
		else
			campoErro.setText("");
		return true;
	}

	public static boolean validaHora(String msgErro, JTextField campoHoraInicial, JTextField campoHoraFinal,JLabel campoErro){
		String timeInicio[] = campoHoraInicial.getText().split(":");
		String timeFim[] = campoHoraFinal.getText().split(":");
		Integer horaInicio[] = Servicos.parseInteger(timeInicio);
		Integer horaFim[] = Servicos.parseInteger(timeFim);
		if(horaInicio == null || horaFim == null){
			campoErro.setText(msgErro);
			return false;
		}

		if(horaInicio[0] >= horaFim[0]){
			if(horaInicio[0] == horaFim[0]){
				if(horaInicio[1] >= horaFim[1]){
					campoErro.setText(msgErro);
					return false;
				}
				campoErro.setText("");
				return true;
			}
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true; 
	}

	public static int isDataValida(Integer dataEvento[]){
		Calendar cal = Calendar.getInstance();
		int anoAtual = cal.get(Calendar.YEAR);
		int mesAtual = (cal.get(Calendar.MONDAY) + 1);
		int diaAtual = cal.get(Calendar.DAY_OF_MONTH);

		int subAno, subMes, subDia;

		subAno = anoAtual-dataEvento[2]  ;
		if(subAno==0){
			subMes = mesAtual-dataEvento[1];
			if(subMes==0){
				subDia = diaAtual-dataEvento[0];
				if(subDia==0)
					return 0;
				else{
					if(subDia > 0)
						return 1;
					else
						return -1;
				}
			}
			else{
				if(subMes > 0)
					return 1;
				else
					return -1;
			}
		}
		else
		{
			if(subAno > 0)
				return 1;
			else
				return -1;
		}
	}

	public static int isHoraValida(Integer horaEvento[]){
		Calendar cal = Calendar.getInstance();
		int horaAtual = cal.get(Calendar.HOUR_OF_DAY);
		int minAtual = cal.get(Calendar.MINUTE);
		int subHora, subMin;

		subHora = horaAtual-horaEvento[0]  ;
		if(subHora==0){
			subMin = minAtual-horaEvento[1];
			if(subMin==0){
				return 0;
			}
			else{
				if(subMin > 0)
					return 1;
				else
					return -1;
			}
		}
		else
		{
			if(subHora > 0)
				return 1;
			else
				return -1;
		}
	}

	public static int isHoraValida(Integer horaGrupo [],Integer horaAtendimento[]){
		int subHora, subMin;

		subHora = horaAtendimento[0]- horaGrupo[0]  ;
		if(subHora==0){
			subMin = horaAtendimento[1]-horaGrupo[1];
			if(subMin==0){
				return 0;
			}
			else{
				if(subMin > 0)
					return 1;
				else
					return -1;
			}
		}
		else
		{
			if(subHora > 0)
				return 1;
			else
				return -1;
		}
	}

	public static boolean validaDataPaciente(String msgErro, JTextField campo, JLabel campoErro, boolean dateFuture){
		String date[] = campo.getText().split("/");
		Integer data[] = Servicos.parseInteger(date);
		Calendar cal = Calendar.getInstance();

		if(data == null)
			return true;

		int diaMax = isDiaValido(data[1]);

		if(isDataValida(data) == 0)
			diaMax = cal.get(Calendar.DAY_OF_MONTH);
		if(dateFuture){
			if( !(isIntValido(data[2], cal.get(Calendar.YEAR))) || !(isIntValido(data[1], 1, 12)) || !(isIntValido(data[0], 1, diaMax))){
				campoErro.setText(msgErro);
				return false;
			}
			if(isDataValida(data) == 1){
				campoErro.setText(msgErro);
				return false;
			}
		}
		else{
			if( !isIntValido(data[2], 1900, cal.get(Calendar.YEAR)) || !isIntValido(data[1], 1, 12) || !isIntValido(data[0], 1, diaMax)){
				campoErro.setText(msgErro);
				return false;
			}
			if(isDataValida(data) == -1){
				campoErro.setText(msgErro);
				return false;
			}
		}
		campoErro.setText("");
		return true;       
	}

	public static boolean validaData(String msgErro, JTextField campo, JLabel campoErro, boolean dateFuture){
		String date[] = campo.getText().split("/");
		Integer data[] = Servicos.parseInteger(date);
		Calendar cal = Calendar.getInstance();

		if(data == null){
			campoErro.setText(msgErro);
			return false;
		}

		int diaMax = isDiaValido(data[1]);

		if(isDataValida(data) == 0)
			diaMax = cal.get(Calendar.DAY_OF_MONTH);
		if(dateFuture){
			if( !(isIntValido(data[2], cal.get(Calendar.YEAR))) || !(isIntValido(data[1], 1, 12)) || !(isIntValido(data[0], 1, diaMax))){
				campoErro.setText(msgErro);
				return false;
			}
			if(isDataValida(data) == 1){
				campoErro.setText(msgErro);
				return false;
			}
		}
		else{
			if( !isIntValido(data[2], 1900, cal.get(Calendar.YEAR)) || !isIntValido(data[1], 1, 12) || !isIntValido(data[0], 1, diaMax)){
				campoErro.setText(msgErro);
				return false;
			}
			if(isDataValida(data) == -1){
				campoErro.setText(msgErro);
				return false;
			}
		}
		campoErro.setText("");
		return true;       
	}
	public static boolean validaData(String campo){
		String date[] = campo.split("/");
		Integer data[] = Servicos.parseInteger(date);
		Calendar cal = Calendar.getInstance();
		if(data == null){
			return false;
		}
		int diaMax = isDiaValido(data[1]);
		if(isDataValida(data) == 0)
			diaMax = cal.get(Calendar.DAY_OF_MONTH);
		if( !isIntValido(data[2], 1900, cal.get(Calendar.YEAR)) || !isIntValido(data[1], 1, 12) || !isIntValido(data[0], 1, diaMax)){
			return false;
		}
		if(isDataValida(data) == -1){
			return false;
		}
		return true;       
	}

	public static boolean validaData(String msgErro, JTextField campo, JLabel campoErro){
		String date[] = campo.getText().split("/");
		Integer data[] = Servicos.parseInteger(date);
		Calendar cal = Calendar.getInstance();

		if(data == null){
			campoErro.setText(msgErro);
			return false;
		}
		int diaMax = isDiaValido(data[1], data[2]);

		if(isDataValida(data) == 0)
			diaMax = cal.get(Calendar.DAY_OF_MONTH);

		if( !(isIntValido(data[2], cal.get(Calendar.YEAR))) && !(isIntValido(data[1], 1, 12)) && !(isIntValido(data[0], 1, diaMax))){
			campoErro.setText(msgErro);
			return false;
		}
		if(isDataValida(data) == 1){
			campoErro.setText(msgErro);
			return false;
		}

		campoErro.setText("");
		return true;
	}
	//	public static boolean validaAniversario(String msgErro,
	//			JFormattedTextField campo, JLabel campoErro,
	//			boolean dateFuture ) {
	//		String date[] = campo.getText().split("/");
	//		Integer data[] = Servicos.parseInteger(date);
	//		Calendar cal = Calendar.getInstance();
	//
	//		if(data == null){
	//			campoErro.setText(msgErro);
	//			return false;
	//		}
	//		int diaMax = isDiaValido(data[1]);
	//		if(data[0] > diaMax || data[0] <= 0){
	//			campoErro.setText(msgErro);
	//			return false;
	//		}
	//		campoErro.setText("");
	//		return true;
	//	}

	public static boolean isIntValido(int valor, int min){
		if(valor < min)
			return false;
		return true;
	}

	public static boolean isIntValido(int valor, int min, int max){
		if((valor < min) || (valor > max))
			return false;
		return true;
	}

	public static boolean isStringValida(String str, String msgErro, JLabel campoErro){
		if(str.trim().isEmpty()){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}
	private static boolean isStringValida(String str, JLabel campoErro) {
		if(str.trim().isEmpty()){
			campoErro.setVisible(true);
			return false;
		}
		campoErro.setVisible(false);
		return true;
	}
	private static boolean isStringValida(String str) {
		if(str.trim().isEmpty()){
			return false;
		}
		return true;

	}
	private static boolean isRadioValido(ButtonGroup radio, JLabel campoErro) {
		if(radio.getSelection() == null){
			campoErro.setVisible(true);
			return false;
		}
		campoErro.setVisible(false);
		return true;
	}
	public static boolean isStringValida(String str, String msgErro, JLabel campoErro, int min, int max){
		if((str.trim().length() < min) || (str.trim().length() > max)  || str.trim().isEmpty()){
			campoErro.setText(msgErro);
			return false;
		}
		campoErro.setText("");
		return true;
	}

	public static boolean isDDDValido(String str, JLabel campoErro){
		String ddd, invalidos[] = {"01", "02", "03", "04", "05", "06", "07",
				"08", "09", "10", "20", "23", "25", "26",
				"29", "30", "36", "39", "40", "50", "52",
				"56", "57", "58", "59", "60", "69", "70",
				"72", "76", "78", "80", "90"};
		ddd = str.substring(0, 2);
		for(int i = 0; i < invalidos.length; i++){
			if(ddd.equals(invalidos[i])){
				campoErro.setText("DDD inválido!");
				return false;
			}
		}
		campoErro.setText("");
		return true;

	}
	public static boolean isDDDValido(String str){
		String ddd, invalidos[] = {"01", "02", "03", "04", "05", "06", "07",
				"08", "09", "10", "20", "23", "25", "26",
				"29", "30", "36", "39", "40", "50", "52",
				"56", "57", "58", "59", "60", "69", "70",
				"72", "76", "78", "80", "90"};
		ddd = str.substring(0, 2);
		for(int i = 0; i < invalidos.length; i++){
			if(ddd.equals(invalidos[i])){
				return false;
			}
		}
		return true;

	}

	public static int isDiaValido(Integer mes){
		switch(mes){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		}
		return 28;
	}

	public static int isDiaValido(Integer mes, Integer ano){
		switch(mes){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		}
		return ((ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0))?29:28;
	}

	public static boolean isCPFValido(String cpf){

		String cpfInval[] = {"00000000000","11111111111", "22222222222", "33333333333", "44444444444", "55555555555", 
				"66666666666","77777777777", "88888888888", "99999999999"}; 		
		int cont,aux2,soma=0;
		int []dig = new int [11];
		int [] digVeri = new int[2];

		if(cpf.length() != 11)
			return false;

		for(cont=0;cont<9;cont++){
			if(cpfInval[cont].equals(cpf))
				return false;
		} 


		for(cont=0;cont<cpf.length();cont++)
			dig[cont] = Character.getNumericValue(cpf.charAt(cont));

		// obtem o primeiro digito verificador
		aux2=10;
		for(cont=0;cont<9;cont++,aux2--){
			soma+= dig[cont] * aux2;
		}
		digVeri[0]=soma % 11;
		digVeri[0]= digVeri[0] < 2 ? 0 : 11-digVeri[0];

		soma=0;
		aux2=11;

		for(cont=0;cont<10;cont++,aux2--){
			if(cont==9)
				soma+= digVeri[0] * aux2;
			else
				soma+= dig[cont] * aux2;
		}

		digVeri[1]=soma % 11;
		digVeri[1]= digVeri[1]<2 ? 0 : 11-digVeri[1];
		if(digVeri[0]!=dig[9] || digVeri[1]!=dig[10])
			return false;
		return true;
	}
	// Mesma Validação so muda porque aqui aceita o cpf 00000000000 que o do primeiro login
	public static boolean isCPFValidoLogin(String cpf){

		String cpfInval[] = {"00000000000","11111111111", "22222222222", "33333333333", "44444444444", "55555555555", 
				"66666666666","77777777777", "88888888888", "99999999999"}; 		
		int cont,aux2,soma=0;
		int []dig = new int [11];
		int [] digVeri = new int[2];

		if(cpf.length() != 11)
			return false;

		for(cont=0;cont<9;cont++){
			if(cpfInval[cont].equals(cpf))
				return false;
		} 


		for(cont=0;cont<cpf.length();cont++)
			dig[cont] = Character.getNumericValue(cpf.charAt(cont));

		// obtem o primeiro digito verificador
		aux2=10;
		for(cont=0;cont<9;cont++,aux2--){
			soma+= dig[cont] * aux2;
		}
		digVeri[0]=soma % 11;
		digVeri[0]= digVeri[0] < 2 ? 0 : 11-digVeri[0];

		soma=0;
		aux2=11;

		for(cont=0;cont<10;cont++,aux2--){
			if(cont==9)
				soma+= digVeri[0] * aux2;
			else
				soma+= dig[cont] * aux2;
		}

		digVeri[1]=soma % 11;
		digVeri[1]= digVeri[1]<2 ? 0 : 11-digVeri[1];
		if(digVeri[0]!=dig[9] || digVeri[1]!=dig[10])
			return false;
		return true;
	}
	public static  int retornarDiaSemana(int ano, int mes, int dia){
		Calendar calendario = new GregorianCalendar(ano, mes - 1, dia);
		return calendario.get(Calendar.DAY_OF_WEEK);
	}


	//=======================================================================================================================
	//Valida data compatível com o dia de trabalho do Grupo

	public static boolean validaData_day_of_week(String dataAgenda,Integer diaSemana, String msgErro, JLabel erroDataAgenda){
		String diaWork = buscaDiaSemana(diaSemana);
		String diaSemanaAgenda = retornaDiaSemanaAtual(dataAgenda);
		if(!diaWork.equalsIgnoreCase(diaSemanaAgenda)){
			erroDataAgenda.setText(msgErro);
			return false;
		}
		return true;	
	}

	private static String buscaDiaSemana(Integer diaSemana) {
		switch(diaSemana){
		case 1:
			return "Domingo";
		case 2:
			return "Segunda-feira";
		case 3:
			return "Terça-feira";
		case 4:
			return "Quarta-feira";
		case 5:
			return "Quinta-feira";
		case 6:
			return "Sexta-feira";
		default:
			return "Sábado";  
		}	
	}

	public static String retornaDiaSemanaAtual(String data){
		try{
			String formato = "dd/MM/yyyy";
			SimpleDateFormat df = new SimpleDateFormat(formato);
			String[] DIA_SEMANA_EXTENSO = new DateFormatSymbols(new Locale("pt","BR")).getWeekdays();
			Calendar c = Calendar.getInstance();
			c.setTime(df.parse(data));
			return DIA_SEMANA_EXTENSO[c.get(Calendar.DAY_OF_WEEK)];
		}catch(ParseException pe){
			pe.printStackTrace();
			return "";
		}
	}
	//=====================================================================================================================
	//=====================================================================================================================

	public static boolean veficicaEntrada(int idAtendimento){
		AtendimentoModel model = new AtendimentoModelImpl();
		Atendimento atendimento = model.getByIdAtendimento(idAtendimento);
		
		if(atendimento.getHorarioSaida() != null)
			return true;
		return false;

	}
	public static boolean veficicaSaida(int idAtendimento){
		AtendimentoModel model = new AtendimentoModelImpl();
		Atendimento atendimento = model.getByIdAtendimento(idAtendimento);
		if(atendimento.getHorarioEntrada() == null)
			return true;
		if(atendimento.getHorarioSaida() != null)
			return true;
		return false;

	}
	public static boolean veficicaDesistencia(int idAtendimento){
		AtendimentoModel model = new AtendimentoModelImpl();
		Atendimento atendimento = model.getByIdAtendimento(idAtendimento);
		
		if(atendimento.getHorarioEntrada() != null)
			return true;
		if(atendimento.getHorarioSaida() != null)
			return true;
		return false;

	}

	public static boolean validaNewTipoAtende_Atende(int idAtendimento,int idTipoAtende){
		TipoAtendimentoDoAtendimentoModel model = new TipoAtendimentoDoAtendimentoModelImpl();
		return model.getByIdAtend_idTipo(idAtendimento,idTipoAtende);
	}
	
	public static boolean validaNewTipoAtende_TipoEncaminha(int idAtendimento, int idEncaminha){
		TipoEncaminhamentoDoAtendimentoModel model = new TipoEncaminhamentoDoAtendimentoModelImpl();
		return model.getByIdAtend_idEncaminha(idAtendimento,idEncaminha);
	}
	
	public static boolean validaStringAltera(String string) {
		if(string.isEmpty())
			return true;
		return false;
	}
}
